<?php
namespace app\api\validate;
/*
 * content : 验证基础类
 * Author  : Songyicong 
 * time    : 2018-04-19 17:25:58 
 * email   : m13726262373@163.com 
 */
use think\Request;
use think\Validate;
class BaseValidate extends Validate{

    /** 
     * 检测所有客户端发来的参数是否符合验证类规则 
     * 基类定义了很多自定义验证方法，这些自定义验证方法可以直接调用
     */
    public function goCheck(){
        //必须设置contrent-type:application/json
        $request = Request::instance();
        $params = $request->param();
        $params['token'] = $request->header('token');

        if(!$this->check($params)){
            // 如果验证不正确，返回权限
			dump(is_array($this->error) ? implode(
                ';', $this->error) : $this->error);
            return false;
        }
        return true;
    }

    /**
	 * 通常传入request.post变量数组，按照规则key过滤后的变量数组
	 */
	public function getDataByRule($arrays) {
		if (array_key_exists('user_id', $arrays) | array_key_exists('uid', $arrays)) {
			// 不允许包含user_id或者uid，防止恶意覆盖user_id外键
			throw new ParameterException([
				'msg' => '参数中包含有非法的参数名user_id或者uid',
			]);
		}
		$newArray = [];
		foreach ($this->rule as $key => $value) {
			$newArray[$key] = $arrays[$key];
		}
		return $newArray;
    }
    
    /**
     * 判断是否是正整数
     */
    protected function isPositiveInteger($value, $rule = '', $data = '', $field = '') {
		if (is_numeric($value) && is_int($value + 0) && ($value + 0) > 0) {
			return true;
		}
		return $field . '必须是正整数';
	}

    /**
     * 判断是否是整数
     */
	protected function isPositiveInteger2($value, $rule = '', $data = '', $field = '') {
		if (is_numeric($value) && is_int($value + 0)) {
			return true;
		}
		return $field . '必须是整数';
    }
    
    /**
     * 判断是否为空
     */
	protected function isNotEmpty($value, $rule = '', $data = '', $field = '') {
		if (empty($value)) {
			return $field . '不允许为空';
		} else {
			return true;
		}
	}

	
    /**
     * 手机号的验证规则
     */
	protected function isMobile($value) {
		$rule = '^1(3|4|5|7|8)[0-9]\d{8}$^';
		$result = preg_match($rule, $value);
		if ($result) {
			return true;
		} else {
			return false;
		}
	}

    // 令牌合法并不代表操作也合法
	// 需要验证一致性
	//    protected function isUserConsistency($value, $rule, $data, $field)
	//    {
	//        $identities = getCurrentIdentity(['uid', 'power']);
	//        extract($identities);
	//
	       // 如果当前令牌是管理员令牌，则允许令牌UID和操作UID不同
	//        if ($power == ScopeEnum::Super) {
	//            return true;
	//        }
	//        else {
	//            if ($value == $uid) {
	//                return true;
	//            }
	//            else {
	//                throw new TokenException([
	//                                             'msg' => '你怎么可以用自己的令牌操作别人的数据？',
	//                                             'code' => 403,
	//                                             'errorCode' => '10003'
	//                                         ]);
	//            }
	//        }
	//   }

}
